summaryrefslogtreecommitdiff
path: root/app/[lng]/partners/pq/page.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'app/[lng]/partners/pq/page.tsx')
-rw-r--r--app/[lng]/partners/pq/page.tsx91
1 files changed, 25 insertions, 66 deletions
diff --git a/app/[lng]/partners/pq/page.tsx b/app/[lng]/partners/pq/page.tsx
index 42c88b21..08faeebb 100644
--- a/app/[lng]/partners/pq/page.tsx
+++ b/app/[lng]/partners/pq/page.tsx
@@ -1,85 +1,44 @@
import { getServerSession } from "next-auth"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
-import * as React from "react"
-import { Shell } from "@/components/shell"
-import { Skeleton } from "@/components/ui/skeleton"
import { getPQDataByVendorId, getPQProjectsByVendorId } from "@/lib/pq/service"
-import { PQInputTabs } from "@/components/pq/pq-input-tabs"
-import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
+import { ClientPQWrapper } from "@/components/pq/client-pq-input-wrapper"
+import { unstable_noStore as noStore } from 'next/cache'
+// 페이지가 기본적으로 동적임을 나타냄
+export const dynamic = "force-dynamic"
export default async function PQInputPage({
- searchParams
+ searchParams,
}: {
searchParams: { projectId?: string }
}) {
+ // Opt out of caching for this route
+ noStore()
+
// 세션
const session = await getServerSession(authOptions)
// 예: 세션에서 vendorId 가져오기
// const vendorId = session?.user.companyId
const vendorId = 17 // 임시
const idAsNumber = Number(vendorId)
-
- const projectId = searchParams.projectId ? parseInt(searchParams.projectId, 10) : undefined
-
- // 벤더에게 요청된 프로젝트 PQ 목록 가져오기 (탭 표시용)
+
+ // 서버에서는 모든 데이터를 가져오고, 프로젝트 필터링은 클라이언트에서 진행
const projectPQs = await getPQProjectsByVendorId(idAsNumber)
-
- // PQ 데이터 조회
- const pqData = await getPQDataByVendorId(idAsNumber, projectId)
-
- // 현재 프로젝트 정보 (있다면)
- const currentProject = projectId
- ? projectPQs.find(p => p.projectId === projectId)
- : null
-
+
+ // 두 가지 방법으로 수정할 수 있습니다:
+
+ // 방법 1: 먼저 allPQData 데이터를 projectId 없이 가져오기
+ const allPQData = await getPQDataByVendorId(idAsNumber, undefined)
+
+ // 방법 2: rawProjectId를 클라이언트로 전달하고, 클라이언트가 필터링을 처리
+
+ // 클라이언트 컴포넌트로 데이터와 원시 searchParams 전달
return (
- <Shell className="gap-2">
- {/* 헤더 - 프로젝트 정보 포함 */}
- <div className="space-y-2">
- <h2 className="text-2xl font-bold tracking-tight">
- Pre-Qualification Check Sheet
- {currentProject && (
- <span className="ml-2 text-muted-foreground">
- - {currentProject.projectCode}
- </span>
- )}
- </h2>
- <p className="text-muted-foreground">
- PQ에 적절한 응답을 제출하시기 바랍니다.
- </p>
- </div>
-
- {/* 일반/프로젝트 PQ 선택 탭 */}
- {projectPQs.length > 0 && (
- <div className="border-b">
- <Tabs defaultValue={projectId ? `project-${projectId}` : "general"}>
- <TabsList>
- <TabsTrigger value="general" asChild>
- <a href="/partners/pq">일반 PQ</a>
- </TabsTrigger>
-
- {projectPQs.map(project => (
- <TabsTrigger key={project.projectId} value={`project-${project.projectId}`} asChild>
- <a href={`/partners/pq?projectId=${project.projectId}`}>
- {project.projectCode}
- </a>
- </TabsTrigger>
- ))}
- </TabsList>
- </Tabs>
- </div>
- )}
-
- {/* PQ 입력 탭 */}
- <React.Suspense fallback={<Skeleton className="h-7 w-52" />}>
- <PQInputTabs
- data={pqData}
- vendorId={idAsNumber}
- projectId={projectId}
- projectData={currentProject}
- />
- </React.Suspense>
- </Shell>
+ <ClientPQWrapper
+ allPQData={allPQData}
+ projectPQs={projectPQs}
+ vendorId={idAsNumber}
+ rawSearchParams={searchParams}
+ />
)
} \ No newline at end of file